package br.com.werp.regras.almoxarifado.visao.decorador;

import br.com.werp.regras.almoxarifado.controle.ControleEntrada;
import br.com.werp.regras.almoxarifado.controle.ControleMercadoria;
import br.com.werp.regras.almoxarifado.controle.ControleMovimentacao;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.FormatDate;
import br.com.werp.regras.geral.util.Html;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.almoxarifado.EntradaItemVO;
import br.com.werp.regras.geral.vos.almoxarifado.MercadoriaProdutoVO;

import org.displaytag.decorator.TableDecorator;


/**
 * @author Sobreira
 * Criado em 22/10/2005
 */
public class EntradaItem extends TableDecorator {
    private ControleMovimentacao controleMovimentacao =
        new ControleMovimentacao();
    private ControleMercadoria controleMercadoria = new ControleMercadoria();

    public String getMerc_descricao() throws Exception {
        return obterMercadoriaProdutoVO(getCurrentRowObject())
                   .getMerc_descricao();
    }

    public String getProd_descricao() throws Exception {
        return obterMercadoriaProdutoVO(getCurrentRowObject())
                   .getProd_descricao();
    }

    public String getPdmc_quantidade() throws Exception {
        StringBuffer buffer = new StringBuffer();
        String retorno =
            String.valueOf(obterMercadoriaProdutoVO(getCurrentRowObject())
                               .getPdmc_quantidade());
        buffer.append("<center>").append(retorno).append("</center>");

        return buffer.toString();
    }

    public String getValortotal() throws Exception {
        StringBuffer buffer = new StringBuffer();
        ControleEntrada controleEntrada = new ControleEntrada();
        MercadoriaProdutoVO mercadoriaProdutoVO =
            obterMercadoriaProdutoVO(getCurrentRowObject());
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();
        buffer.append("<center>")
              .append(Util.formatNumber("R$ ##,##0.00000",
                controleEntrada.calculaValorEntradaItem(mercadoriaProdutoVO,
                    entradaItemVO))).append("</center>");

        return buffer.toString();
    }

    private MercadoriaProdutoVO obterMercadoriaProdutoVO(
        Object currentRowObject) throws Exception {
        String filial =
            (String) getPageContext().getSession().getAttribute("filialId");

        return controleMercadoria.obterMercadoriaProdutoVO((EntradaItemVO) currentRowObject,
            filial);
    }

    public String getId() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(Html.checkBox("mercadorias", entradaItemVO.getId()));
    }

    public String getEtit_data_chegada() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(FormatDate.format(
                entradaItemVO.getEtit_data_chegada(), Constantes.DATA_FORMATO));
    }

    public String getEtit_quantidade() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(String.valueOf(entradaItemVO.getEtit_quantidade()));
    }

    public String getEtit_valor() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(Util.formatNumber("R$ ##,#####0.00000",
                entradaItemVO.getEtit_valor()));
    }

    public String getEtit_desconto_valor() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(Util.formatNumber("R$ ##,#####0.00000",
                entradaItemVO.getEtit_desconto_valor()));
    }

    public String getEtit_valor_frete() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(Util.formatNumber("R$ ##,#####0.00000",
                entradaItemVO.getEtit_valor_frete()));
    }

    public String getEtit_outras_despesas() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        return Html.center(Util.formatNumber("R$ ##,#####0.00000",
                entradaItemVO.getEtit_outras_despesas()));
    }

    public String getEstoque() {
        EntradaItemVO entradaItemVO = (EntradaItemVO) getCurrentRowObject();

        try {
            return String.valueOf(controleMovimentacao.obterQtdeProduto(
                    controleMercadoria.obterProdutoEmpresaDaMercadoria(
                        entradaItemVO)));
        } catch (Exception e) {
            return e.getMessage();
        }
    }
}
